package com.softer.wxzj.mapper;

import com.github.pagehelper.PageInfo;
import com.softer.wxzj.common.entity.Page;
import com.softer.wxzj.entity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Repository
public interface ExpProjectReqMapper {
    /**
     * 查询单个房间处于使用在途的业务数量
     *
     * @param houseId
     * @return
     */
    int getInProgressCountByHouseId(String houseId);

    int deleteByPrimaryKey(String id);

    int insert(ExpProjectReq record);

    ExpProjectReq selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(ExpProjectReq record);

    int updateByPrimaryKey(ExpProjectReq record);

    List<ExpProjectReq> selectWaitAuditProject(ExpProjectReq expProjectReq);

    List<ExpProjectReq> getExpirationDate(@Param("regionId") String regionId, @Param("maintainType") String maintainType);

    /**
     * 项目详情
     *
     * @param id 项目id
     * @return 项目实体
     */
    ExpProjectReq getInfo(@Param("id") String id);

    /**
     * 获取项目管理列表
     *
     * @param baseRegionInfo 查询实体
     * @return 列表
     */
    List<BaseRegionInfo> getRegionList(BaseRegionInfo baseRegionInfo);

    /**
     * 获取项目管理列表总计
     *
     * @param baseRegionInfo 查询实体
     * @return 总计结果
     */
    BaseRegionInfo getSumProject(BaseRegionInfo baseRegionInfo);

    /**
     * 预览
     *
     * @param expProjectReq 查询实体
     * @return 列表
     */
    List<ExpProjectReq> preview(ExpProjectReq expProjectReq);

    List<ExpProjectReq> previewFuzzy(ExpProjectReq expProjectReq);

    List<Map<String, Object>> getHouserInfo(String id);

    /**
     * 竣工验收列表
     *
     * @param expProjectReq 查询实体
     * @return 列表
     */
    List<ExpProjectReq> finish(ExpProjectReq expProjectReq);

    List<ExpProjectReq> finishFuzzy(@Param("fuzzy") String fuzzy, @Param("zoneCode") String zoneCode);

    ExpProjectReq getFinishInfo(String id);

    /**
     * 验收
     *
     * @param expProjectReq 验收项目实体
     * @return 结果
     */
    int updateFinish(ExpProjectReq expProjectReq);

    /**
     * 验收撤销
     *
     * @param expProjectReq 验收项目实体
     * @return 结果
     */
    int finishCancel(ExpProjectReq expProjectReq);

    /**
     * 审核
     *
     * @param expProjectReq id     项目ID
     *                      flowState 审核状态（0保存，1审核中，2审核通过，3审核失败，4退回）
     *                      proreportUser   提交审核人
     *                      proreportDate   提交审核日期
     *                      step 步骤
     * @return 操作结果
     */
    int audit(ExpProjectReq expProjectReq);

    /**
     * 查询项目分摊房间列表
     *
     * @param id 项目ID
     * @return 房间列表
     */
    List<BaseHouseInfo> getHouseList(String id);

    /**
     * 根据项目ID查询分摊内容
     *
     * @param id 项目ID
     * @return 分摊内容
     */
    ExpProjectReq getReqById(String id);

    /**
     * 根据小区ID查询参与分摊的房间与业主列表
     *
     * @param regionId 小区id
     *                 sys 系统参数（空房间是否参与分摊）
     * @return 分摊内容
     */
    List<BaseHouseInfo> getxqApportionList(@Param("regionId") String regionId, @Param("sys") String sys);

    int countxqHouseAreaIsNullSum(@Param("regionId") String regionId, @Param("sys") String sys);

    List<BaseHouseInfo> getzrApportionList(Map<String, Object> m);

    int countzrHouseAreaIsNullSum(Map<String, Object> m);

    List<BaseHouseInfo> getdyApportionList(Map<String, Object> m);

    List<BaseHouseInfo> getzdApportionList(Map<String, Object> m);

    /**
     * 根据小区ID查询参与分摊的总户数与分摊总面积
     *
     * @param regionId 小区id
     *                 sys 系统参数（空房间是否参与分摊）
     * @return 分摊汇总
     */
    ExpProjectReq getxqApportionSum(@Param("regionId") String regionId, @Param("sys") String sys);

    ExpProjectReq getzrApportionSum(Map<String, Object> m);

    ExpProjectReq getdyApportionSum(Map<String, Object> m);

    ExpProjectReq getzdApportionSum(Map<String, Object> m);

    /**
     * 根据项目ID查询已选中的自然幢id&name
     *
     * @param id 项目id
     * @return
     */
    List<BaseBuildInfo> getBuildList(String id);

    List<String> getCellList(Map<String, String> m);

    List<String> getHouseList(Map<String, String> m);

    List<BaseHouseInfo> getHouseListByBuildCell(Map<String, String> m);

    Integer totalCellSum(String id);

    Integer selectedCellSum(Map<String, String> m);

    /**
     * 查询当前小区选中的维修类别下的维修对象信息
     *
     * @param maintenanceEquipment 维修对象信息列表（小区id&对象类别ID）
     * @return
     */
    List<MaintenanceEquipment> selectMaintenanceEquipment(MaintenanceEquipment maintenanceEquipment);

    List<MaintenanceEquipment> selectMainEquipmentByIdList(String idList);

    ExpProjectReq getInfoById(@Param("id") String id);

    BigDecimal getSumByReqId(ExpPayReqDetail expPayReqDetail);

    /**
     * 修改状态
     *
     * @param id
     * @param step
     * @return
     */
    int changeStep(@Param("id") String id, @Param("step") String step);

    /**
     * 查看
     *
     * @param busiNo
     * @return
     */
    ExpProjectReq selectReqNo(String busiNo);

    int selectHouseFlowInstance(@Param("flowType") String flowType, @Param("list") List<OwnerSignature> list);

    int selectOwnerFlowInstance(@Param("flowType") String flowType, @Param("list") List<OwnerSignature> list);

    /**
     * 查询小区有没有正在维修的
     *
     * @param regionNo
     * @return
     */
    List<String> selectByRegionAndState(String regionNo);

    int selectHouseCount(String houseId);

    /**
     * 查询小区有没有未使用完
     *
     * @param buildNo
     * @return
     */
    int selectByRegionId(String buildNo);

    /**
     * 查询拨款管理的未上传的数量
     *
     * @param id   业务Id
     * @param type 业务类型
     * @return 未上传的数量
     */
    int getUnUploadNum(@Param("id") String id, @Param("type") String type);

    /**
     * 查询自然幢汇总信息，用于分摊划分时的自然幢浮窗显示
     *
     * @param id 自然幢Id
     * @return 汇总信息
     */
    BuildSummaryInfo getBuildSummaryInfo(String id);

    int selectCreater(String operNo);

    /**
     * 查询房屋的项目
     *
     * @param expProjectReq
     * @return
     */
    List<ExpProjectReq> selectByHouseId(ExpProjectReq expProjectReq);

    /**
     * 查詢详情
     * 用于跳转连接的查询
     *
     * @param id ID
     * @return 维修项目
     */
    ExpProjectReq getDetails(String id);

    /**
     * 通过维修项目查询
     *
     * @param expProjectReq
     * @return
     */
    List<ExpProjectReq> selectByMainObject(ExpProjectReq expProjectReq);

    /**
     * 通过维修企业查询维修项目的接口
     *
     * @param expProjectReq 查询实体
     * @return 维修项目列表
     */
    List<ExpProjectReq> getProjectReqListByConstruction(ExpProjectReq expProjectReq);

    /**
     * 查询自然幢维修记录列表
     *
     * @param buildId 自然幢ID
     * @return 列表
     */
    List<ExpProjectReq> getBuildProjectList(String buildId);

    /**
     * 项目审核查询列表
     *
     * @param expProjectReq
     * @return
     */
    List<ExpProjectReq> projectCheckList(ExpProjectReq expProjectReq);

    List<ExpProjectReq> appropriationCheckList(ExpProjectReq expProjectReq);

    /**
     * 查询小区是否存在业委会
     *
     * @param regionId 小区ID
     * @return 业委会ID
     */
    String getCommittee(String regionId);

    /**
     * 业委会/居委会项目审核查询列表
     *
     * @param expProjectReq 查询实体
     * @return 项目审核查询列表
     */
    List<ExpProjectReq> projectCheckListForCommittee(ExpProjectReq expProjectReq);
    /**
     * 业委会/居委会拨款审核查询列表
     *
     * @param expProjectReq 查询实体
     * @return 拨款审核查询列表
     */
    List<ExpProjectReq> appropriationCheckListForCommittee(ExpProjectReq expProjectReq);
    /**
     * 业委会/居委会维修项目管理列表
     *
     * @param expProjectReq 查询实体
     * @return 列表
     */
    List<ExpProjectReq> previewForCommittee(ExpProjectReq expProjectReq);
}
